Core animation教程:层坐标及转换
Core animation教程:层坐标及转换
Ios技术文章收录 坐标计算
Core animation教程:层坐标及转换
2010-01-2017:39
单独窗口打印放大字号缩小字号
这章节主要描述层坐标的构成要素,构成要素之间的关系及如何转换产生复杂的效果。
[作者 long4success
原帖地址 �]( “分享到网易微博”)�http://www.cocoachina.com/bbs/read.php?tid-10972-fpage-0-toread--page-1.html
这章节主要描述层坐标的构成要素,构成要素之间的关系及如何转换产生复杂的效果。
1 层坐标系统
层 坐标使用了和Quanz图形一样的坐标系统。默认情况下,原点(0.0, 0.0)在左下角,向右及向上增长。请注意:该坐标系统是不同于UIView实例的坐标系统,UIView系统的原点在左上角,向右及向下增长。每个层的 实例都维护自己的坐标系统,定位所有的子层及绘图时都是相对于这个坐标系统。
2 层的几何坐标
层的几何坐标系统图:

2.1 Bounds
没有人不知道这东东,跳过。
2.2 Position
CGPoint类型,指定了相对于父层(superlayer)的位置,由父层的坐标系统来表示。
2.3 Frame
改变层的frame时,层的position和bounds会相应的改变,但层并没有frame属性,它是由层的position, bounds, anchorPoint(参照点) 和transform计算而来。
2.4 Anchor point 参照点
今天的重点属性。一定要理解。该属性是在层的bounds范围内的一个点,值为0.0到1.0。所有的转换都是相对于这个点进行计算的。
下图是三个anchor point的值:

接下来,我们来看一下frame, bounds, position 及 anchorPoint之间的关系。
如下图:

在 这个图中,anchor point的默认值为(0.5,0.5),相当于层的中心。如果你设置frame为(40.0, 60.0, 120.0, 80.0),则position值会被自动设置为(100,100)。我们还可以看到旋转和缩放的转换计算都是相对于参照点进行的。
下图的frame的大小和图3是一样的,但是anchor point为(0.0,0.0):

2.5 cornerRadius
当要绘图,剪辑子层,画边框及阴影时,可以指定层所使用的半径大小以产生圆角效果。
3 层的几何坐标转换
上面讲了那么多,都是为这一小节坐铺垫的。
CATransform3D结构体定义了一个用于旋转,缩放,偏移,倾斜及应用透视变换
的三维坐标变换。原型如下:
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
可以将该结构体赋值给层的两个属性transform 或者sublayerTransform,就可以实现坐标转换。
你可以通过以下三个方法来创建和修改这个结构体:
1) 使用CATransform3D函数获取
2) 直接修改结构体数据成员
3) 使用键值编码和键路径(key paths)
3.1 转换函数
3.1.1 平移,缩放及旋转转换函数(以下如何进行坐标转换计算实在是看不懂,线性代数太滥了,真后悔当初没好好学,^&^。高手请指教):

示例:
reflectionLayer.transform = CATransform3DMakeScale(1.0, -1.0, 1.0);
该函数使层的Y坐标反转,产生倒影效果。
论谈里有一个关于CATransform3DMakeScale矩阵转换的使用例子,大家可以看一下,对于理解矩阵转换还是很有帮助的,地址:http://www.[cocoachina.com/macdev/ca/2009/0611/33.html](http://cocoachina.com/macdev/ca/2009/0611/33.html)
系统也提供了反转矩阵的函数CATransform3DInvert。
3.1.2 仿射转换函数:

3.1.3 测试是否是相等的函数:

3.2 使用键路径(key paths)修改转换函数

示例:
myLayer.transform.rotation.x=0;
[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@”transform.rotation.x”];
相关日志 Core animation核心动画渲染架构 http://cocoachina.com/macdev/objc/2010/0120/349.html?1263981109
Core animation简介 http://cocoachina.com/macdev/objc/2010/0120/348.html

